一 . 概述

决策树是一个预测模型;它代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表某个可能的属性值,而每个叶节点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,可以用于分析数据,同样也可以用来作预测。

二 . 所属分类

决策树一般属于 监督学习。

三 . Entropy (熵)

决策树需要用到熵。

熵是一个物理学概念,是一种测量在动力学方面不能做功的能量总数,也就是当总体的熵增加,其做功能力也下降,熵的量度正是能量退化的指标。熵亦被用于计算一个系统中的失序现象,也就是计算该系统混乱的程度。熵越低越稳定。

公式

简化

其中p

四 . Information Gain (信息增益)

信息增益代表了在一个条件下,信息复杂度(不确定性)减少的程度。

信息增益是特征选择的一个重要指标,它定义为一个特征能够为分类系统带来多少信息,带来的信息越多,说明该特征越重要,相应的信息增益也就越大。

五 . sklearn 决策树示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

data = np.asarray(pd.read_csv('data.csv', header=None)) # 读取数据 去掉header头 并转为numpy array

X = data[:, 0:2]
y= data[:, 2]

model = DecisionTreeClassifier(max_depth=7, min_samples_leaf=1, ) # 选择决策树模型 其中最大深度为7 最小样本数为10 (当前数据中 如最小样本数为1 则可以准确性达到 100% , 最小样本数决定是否剪枝)

reg = model.fit(X,y) # 训练模型
y_pred = model.predict(X) #预测模型

acc = accuracy_score(y, y_pred) # 查看计算准确度

六 . 可视化

1
2
3
4
5
6
7
8
9
10
11
12
13
import graphviz
from sklearn import tree

dot_data = tree.export_graphviz(model, out_file='tree.dot',
# feature_names=data.columns[:-1], # 特征名称
class_names=['No', 'Yes'], # 目标变量的类别名
filled=True, rounded=True,
special_characters=True)

with open('tree.dot') as f:
dot = f.read()

graphviz.Source(dot)